<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/smp.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/smp.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="Maybe">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19MSU5VWF9TTVBfSF8w"><span class="b">__LINUX_SMP_H</span></a>
<a name="2" /><span class="Maybe">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19MSU5VWF9TTVBfSF8w"><span class="b">__LINUX_SMP_H</span></a>
<a name="3" /><span class="Maybe">       3:</span> 
<a name="4" /><span class="Maybe">       4:</span> <span class="k">/*</span>
<a name="5" /><span class="Maybe">       5:</span> <span class="k"> *    Generic SMP support</span>
<a name="6" /><span class="Maybe">       6:</span> <span class="k"> *        Alan Cox. &lt;alan@redhat.com&gt;</span>
<a name="7" /><span class="Maybe">       7:</span> <span class="k"> */</span>
<a name="8" /><span class="Maybe">       8:</span> 
<a name="9" /><span class="Maybe">       9:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">errno</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="10" /><span class="Maybe">      10:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">types</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="11" /><span class="Maybe">      11:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">list</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="12" /><span class="Maybe">      12:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">cpumask</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="13" /><span class="Maybe">      13:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">init</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="14" /><span class="Maybe">      14:</span> 
<a name="15" /><span class="Maybe">      15:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">cpu_idle</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="16" /><span class="Maybe">      16:</span> 
<a name="17" /><span class="Maybe">      17:</span> <span class="m">typedef</span> <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">smp_call_func_t</span><span class="f">)</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="b">info</span><span class="f">)</span><span class="f">;</span>
<a name="18" /><span class="Maybe">      18:</span> <span class="m">struct</span> <span class="b">call_single_data</span> <span class="f">{</span>
<a name="19" /><span class="Maybe">      19:</span>     <span class="m">struct</span> <span class="b">list_head</span> <span class="b">list</span><span class="f">;</span>
<a name="20" /><span class="Maybe">      20:</span>     <span class="b">smp_call_func_t</span> <span class="b">func</span><span class="f">;</span>
<a name="21" /><span class="Maybe">      21:</span>     <span class="m">void</span> <span class="f">*</span><span class="b">info</span><span class="f">;</span>
<a name="22" /><span class="Maybe">      22:</span>     <span class="b">u16</span> <span class="b">flags</span><span class="f">;</span>
<a name="23" /><span class="Maybe">      23:</span> <span class="f">}</span><span class="f">;</span>
<a name="24" /><span class="Maybe">      24:</span> 
<a name="25" /><span class="Maybe">      25:</span> <span class="k">/* total number of cpus in this system (may exceed NR_CPUS) */</span>
<a name="26" /><span class="Maybe">      26:</span> <span class="m">extern</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">total_cpus</span><span class="f">;</span>
<a name="27" /><span class="Maybe">      27:</span> 
<a name="28" /><span class="Maybe">      28:</span> <span class="m">int</span> <span class="b">smp_call_function_single</span><span class="f">(</span><span class="m">int</span> <span class="b">cpuid</span><span class="f">,</span> <span class="b">smp_call_func_t</span> <span class="b">func</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">info</span><span class="f">,</span>
<a name="29" /><span class="Maybe">      29:</span>                  <span class="m">int</span> <span class="b">wait</span><span class="f">)</span><span class="f">;</span>
<a name="30" /><span class="Maybe">      30:</span> 
<a name="31" /><span class="Maybe">      31:</span> <span class="k">/*</span>
<a name="32" /><span class="Maybe">      32:</span> <span class="k"> * Call a function on all processors</span>
<a name="33" /><span class="Maybe">      33:</span> <span class="k"> */</span>
<a name="34" /><span class="Maybe">      34:</span> <span class="m">int</span> <span class="b">on_each_cpu</span><span class="f">(</span><span class="b">smp_call_func_t</span> <span class="b">func</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">info</span><span class="f">,</span> <span class="m">int</span> <span class="b">wait</span><span class="f">)</span><span class="f">;</span>
<a name="35" /><span class="Maybe">      35:</span> 
<a name="36" /><span class="Maybe">      36:</span> <span class="k">/*</span>
<a name="37" /><span class="Maybe">      37:</span> <span class="k"> * Call a function on processors specified by mask, which might include</span>
<a name="38" /><span class="Maybe">      38:</span> <span class="k"> * the local one.</span>
<a name="39" /><span class="Maybe">      39:</span> <span class="k"> */</span>
<a name="40" /><span class="Maybe">      40:</span> <span class="m">void</span> <span class="b">on_each_cpu_mask</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">mask</span><span class="f">,</span> <span class="b">smp_call_func_t</span> <span class="b">func</span><span class="f">,</span>
<a name="41" /><span class="Maybe">      41:</span>         <span class="m">void</span> <span class="f">*</span><span class="b">info</span><span class="f">,</span> <span class="m">bool</span> <span class="b">wait</span><span class="f">)</span><span class="f">;</span>
<a name="42" /><span class="Maybe">      42:</span> 
<a name="43" /><span class="Maybe">      43:</span> <span class="k">/*</span>
<a name="44" /><span class="Maybe">      44:</span> <span class="k"> * Call a function on each processor for which the supplied function</span>
<a name="45" /><span class="Maybe">      45:</span> <span class="k"> * cond_func returns a positive value. This may include the local</span>
<a name="46" /><span class="Maybe">      46:</span> <span class="k"> * processor.</span>
<a name="47" /><span class="Maybe">      47:</span> <span class="k"> */</span>
<a name="48" /><span class="Maybe">      48:</span> <span class="m">void</span> <span class="b">on_each_cpu_cond</span><span class="f">(</span><span class="m">bool</span> <span class="f">(</span><span class="f">*</span><span class="b">cond_func</span><span class="f">)</span><span class="f">(</span><span class="m">int</span> <span class="b">cpu</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">info</span><span class="f">)</span><span class="f">,</span>
<a name="49" /><span class="Maybe">      49:</span>         <span class="b">smp_call_func_t</span> <span class="b">func</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">info</span><span class="f">,</span> <span class="m">bool</span> <span class="b">wait</span><span class="f">,</span>
<a name="50" /><span class="Maybe">      50:</span>         <span class="b">gfp_t</span> <span class="b">gfp_flags</span><span class="f">)</span><span class="f">;</span>
<a name="51" /><span class="Maybe">      51:</span> 
<a name="52" /><span class="Maybe">      52:</span> <span class="m">void</span> <span class="b">__smp_call_function_single</span><span class="f">(</span><span class="m">int</span> <span class="b">cpuid</span><span class="f">,</span> <span class="m">struct</span> <span class="b">call_single_data</span> <span class="f">*</span><span class="b">data</span><span class="f">,</span>
<a name="53" /><span class="Maybe">      53:</span>                 <span class="m">int</span> <span class="b">wait</span><span class="f">)</span><span class="f">;</span>
<a name="54" /><span class="Maybe">      54:</span> 
<a name="55" /><span class="Maybe">      55:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1NNUF8w"><span class="b">CONFIG_SMP</span></a>
<a name="56" /><span class="Maybe">      56:</span> 
<a name="57" /><span class="Maybe">      57:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">preempt</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="58" /><span class="Maybe">      58:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">kernel</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="59" /><span class="Maybe">      59:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">compiler</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="60" /><span class="Maybe">      60:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">thread_info</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="61" /><span class="Maybe">      61:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">smp</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="62" /><span class="Maybe">      62:</span> 
<a name="63" /><span class="Maybe">      63:</span> <span class="k">/*</span>
<a name="64" /><span class="Maybe">      64:</span> <span class="k"> * main cross-CPU interfaces, handles INIT, TLB flush, STOP, etc.</span>
<a name="65" /><span class="Maybe">      65:</span> <span class="k"> * (defined in asm header):</span>
<a name="66" /><span class="Maybe">      66:</span> <span class="k"> */</span>
<a name="67" /><span class="Maybe">      67:</span> 
<a name="68" /><span class="Maybe">      68:</span> <span class="k">/*</span>
<a name="69" /><span class="Maybe">      69:</span> <span class="k"> * stops all CPUs but the current one:</span>
<a name="70" /><span class="Maybe">      70:</span> <span class="k"> */</span>
<a name="71" /><span class="Maybe">      71:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">smp_send_stop</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="72" /><span class="Maybe">      72:</span> 
<a name="73" /><span class="Maybe">      73:</span> <span class="k">/*</span>
<a name="74" /><span class="Maybe">      74:</span> <span class="k"> * sends a &apos;reschedule&apos; event to another CPU:</span>
<a name="75" /><span class="Maybe">      75:</span> <span class="k"> */</span>
<a name="76" /><span class="Maybe">      76:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">smp_send_reschedule</span><span class="f">(</span><span class="m">int</span> <span class="b">cpu</span><span class="f">)</span><span class="f">;</span>
<a name="77" /><span class="Maybe">      77:</span> 
<a name="78" /><span class="Maybe">      78:</span> 
<a name="79" /><span class="Maybe">      79:</span> <span class="k">/*</span>
<a name="80" /><span class="Maybe">      80:</span> <span class="k"> * Prepare machine for booting other CPUs.</span>
<a name="81" /><span class="Maybe">      81:</span> <span class="k"> */</span>
<a name="82" /><span class="Maybe">      82:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">smp_prepare_cpus</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span> <span class="b">max_cpus</span><span class="f">)</span><span class="f">;</span>
<a name="83" /><span class="Maybe">      83:</span> 
<a name="84" /><span class="Maybe">      84:</span> <span class="k">/*</span>
<a name="85" /><span class="Maybe">      85:</span> <span class="k"> * Bring a CPU up</span>
<a name="86" /><span class="Maybe">      86:</span> <span class="k"> */</span>
<a name="87" /><span class="Maybe">      87:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">__cpu_up</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span> <span class="b">cpunum</span><span class="f">,</span> <span class="m">struct</span> <span class="b">task_struct</span> <span class="f">*</span><span class="b">tidle</span><span class="f">)</span><span class="f">;</span>
<a name="88" /><span class="Maybe">      88:</span> 
<a name="89" /><span class="Maybe">      89:</span> <span class="k">/*</span>
<a name="90" /><span class="Maybe">      90:</span> <span class="k"> * Final polishing of CPUs</span>
<a name="91" /><span class="Maybe">      91:</span> <span class="k"> */</span>
<a name="92" /><span class="Maybe">      92:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">smp_cpus_done</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span> <span class="b">max_cpus</span><span class="f">)</span><span class="f">;</span>
<a name="93" /><span class="Maybe">      93:</span> 
<a name="94" /><span class="Maybe">      94:</span> <span class="k">/*</span>
<a name="95" /><span class="Maybe">      95:</span> <span class="k"> * Call a function on all other processors</span>
<a name="96" /><span class="Maybe">      96:</span> <span class="k"> */</span>
<a name="97" /><span class="Maybe">      97:</span> <span class="m">int</span> <span class="b">smp_call_function</span><span class="f">(</span><span class="b">smp_call_func_t</span> <span class="b">func</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">info</span><span class="f">,</span> <span class="m">int</span> <span class="b">wait</span><span class="f">)</span><span class="f">;</span>
<a name="98" /><span class="Maybe">      98:</span> <span class="m">void</span> <span class="b">smp_call_function_many</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">mask</span><span class="f">,</span>
<a name="99" /><span class="Maybe">      99:</span>                 <span class="b">smp_call_func_t</span> <span class="b">func</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">info</span><span class="f">,</span> <span class="m">bool</span> <span class="b">wait</span><span class="f">)</span><span class="f">;</span>
<a name="100" /><span class="Maybe">     100:</span> 
<a name="101" /><span class="Maybe">     101:</span> <span class="m">int</span> <span class="b">smp_call_function_any</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">mask</span><span class="f">,</span>
<a name="102" /><span class="Maybe">     102:</span>               <span class="b">smp_call_func_t</span> <span class="b">func</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">info</span><span class="f">,</span> <span class="m">int</span> <span class="b">wait</span><span class="f">)</span><span class="f">;</span>
<a name="103" /><span class="Maybe">     103:</span> 
<a name="104" /><span class="Maybe">     104:</span> <span class="m">void</span> <span class="b">kick_all_cpus_sync</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="105" /><span class="Maybe">     105:</span> 
<a name="106" /><span class="Maybe">     106:</span> <span class="k">/*</span>
<a name="107" /><span class="Maybe">     107:</span> <span class="k"> * Generic and arch helpers</span>
<a name="108" /><span class="Maybe">     108:</span> <span class="k"> */</span>
<a name="109" /><span class="Maybe">     109:</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pbml0XzA_"><span class="b">__init</span></a> <span class="b">call_function_init</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="110" /><span class="Maybe">     110:</span> <span class="m">void</span> <span class="b">generic_smp_call_function_single_interrupt</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="111" /><span class="Maybe">     111:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Z2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHRfMA__"><span class="b">generic_smp_call_function_interrupt</span></a> \
<a name="112" /><span class="Maybe">     112:</span>     <span class="b">generic_smp_call_function_single_interrupt</span>
<a name="113" /><span class="Maybe">     113:</span> 
<a name="114" /><span class="Maybe">     114:</span> <span class="k">/*</span>
<a name="115" /><span class="Maybe">     115:</span> <span class="k"> * Mark the boot cpu &quot;online&quot; so that it can call console drivers in</span>
<a name="116" /><span class="Maybe">     116:</span> <span class="k"> * printk() and can access its per-cpu storage.</span>
<a name="117" /><span class="Maybe">     117:</span> <span class="k"> */</span>
<a name="118" /><span class="Maybe">     118:</span> <span class="m">void</span> <span class="b">smp_prepare_boot_cpu</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="119" /><span class="Maybe">     119:</span> 
<a name="120" /><span class="Maybe">     120:</span> <span class="m">extern</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">setup_max_cpus</span><span class="f">;</span>
<a name="121" /><span class="Maybe">     121:</span> <span class="m">extern</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pbml0XzA_"><span class="b">__init</span></a> <span class="b">setup_nr_cpu_ids</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="122" /><span class="Maybe">     122:</span> <span class="m">extern</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pbml0XzA_"><span class="b">__init</span></a> <span class="b">smp_init</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="123" /><span class="Maybe">     123:</span> 
<a name="124" /><span class="False">     124:</span> <span class="f">#</span><span class="n">else</span> <span class="k">/* !SMP */</span>
<a name="125" /><span class="False">     125:</span> 
<a name="126" /><span class="False">     126:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">smp_send_stop</span><span class="f">(</span><span class="m">void</span><span class="f">)</span> <span class="f">{</span> <span class="f">}</span>
<a name="127" /><span class="False">     127:</span> 
<a name="128" /><span class="False">     128:</span> <span class="k">/*</span>
<a name="129" /><span class="False">     129:</span> <span class="k"> *    These macros fold the SMP functionality into a single CPU system</span>
<a name="130" /><span class="False">     130:</span> <span class="k"> */</span>
<a name="131" /><span class="False">     131:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cmF3X3NtcF9wcm9jZXNzb3JfaWRfMA__"><span class="b">raw_smp_processor_id</span></a><span class="f">(</span><span class="f">)</span>            <span class="c">0</span>
<a name="132" /><span class="False">     132:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">up_smp_call_function</span><span class="f">(</span><span class="b">smp_call_func_t</span> <span class="b">func</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">info</span><span class="f">)</span>
<a name="133" /><span class="False">     133:</span> <span class="f">{</span>
<a name="134" /><span class="False">     134:</span>     <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="135" /><span class="False">     135:</span> <span class="f">}</span>
<a name="136" /><span class="False">     136:</span> <span class="f">#</span><span class="n">define</span> <span class="b">smp_call_function</span><span class="f">(</span><span class="b">func</span><span class="f">,</span> <span class="b">info</span><span class="f">,</span> <span class="b">wait</span><span class="f">)</span> \
<a name="137" /><span class="False">     137:</span>             <span class="f">(</span><span class="b">up_smp_call_function</span><span class="f">(</span><span class="b">func</span><span class="f">,</span> <span class="b">info</span><span class="f">)</span><span class="f">)</span>
<a name="138" /><span class="False">     138:</span> 
<a name="139" /><span class="False">     139:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">smp_send_reschedule</span><span class="f">(</span><span class="m">int</span> <span class="b">cpu</span><span class="f">)</span> <span class="f">{</span> <span class="f">}</span>
<a name="140" /><span class="False">     140:</span> <span class="f">#</span><span class="n">define</span> <span class="b">smp_prepare_boot_cpu</span><span class="f">(</span><span class="f">)</span>            <span class="m">do</span> <span class="f">{</span><span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="141" /><span class="False">     141:</span> <span class="f">#</span><span class="n">define</span> <span class="b">smp_call_function_many</span><span class="f">(</span><span class="b">mask</span><span class="f">,</span> <span class="b">func</span><span class="f">,</span> <span class="b">info</span><span class="f">,</span> <span class="b">wait</span><span class="f">)</span> \
<a name="142" /><span class="False">     142:</span>             <span class="f">(</span><span class="b">up_smp_call_function</span><span class="f">(</span><span class="b">func</span><span class="f">,</span> <span class="b">info</span><span class="f">)</span><span class="f">)</span>
<a name="143" /><span class="False">     143:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">call_function_init</span><span class="f">(</span><span class="m">void</span><span class="f">)</span> <span class="f">{</span> <span class="f">}</span>
<a name="144" /><span class="False">     144:</span> 
<a name="145" /><span class="False">     145:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span>
<a name="146" /><span class="False">     146:</span> <span class="b">smp_call_function_any</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">mask</span><span class="f">,</span> <span class="b">smp_call_func_t</span> <span class="b">func</span><span class="f">,</span>
<a name="147" /><span class="False">     147:</span>               <span class="m">void</span> <span class="f">*</span><span class="b">info</span><span class="f">,</span> <span class="m">int</span> <span class="b">wait</span><span class="f">)</span>
<a name="148" /><span class="False">     148:</span> <span class="f">{</span>
<a name="149" /><span class="False">     149:</span>     <span class="m">return</span> <span class="b">smp_call_function_single</span><span class="f">(</span><span class="c">0</span><span class="f">,</span> <span class="b">func</span><span class="f">,</span> <span class="b">info</span><span class="f">,</span> <span class="b">wait</span><span class="f">)</span><span class="f">;</span>
<a name="150" /><span class="False">     150:</span> <span class="f">}</span>
<a name="151" /><span class="False">     151:</span> 
<a name="152" /><span class="False">     152:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">kick_all_cpus_sync</span><span class="f">(</span><span class="m">void</span><span class="f">)</span> <span class="f">{</span>  <span class="f">}</span>
<a name="153" /><span class="False">     153:</span> 
<a name="154" /><span class="Maybe">     154:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !SMP */</span>
<a name="155" /><span class="Maybe">     155:</span> 
<a name="156" /><span class="Maybe">     156:</span> <span class="k">/*</span>
<a name="157" /><span class="Maybe">     157:</span> <span class="k"> * smp_processor_id(): get the current CPU ID.</span>
<a name="158" /><span class="Maybe">     158:</span> <span class="k"> *</span>
<a name="159" /><span class="Maybe">     159:</span> <span class="k"> * if DEBUG_PREEMPT is enabled then we check whether it is</span>
<a name="160" /><span class="Maybe">     160:</span> <span class="k"> * used in a preemption-safe way. (smp_processor_id() is safe</span>
<a name="161" /><span class="Maybe">     161:</span> <span class="k"> * if it&apos;s used in a preemption-off critical section, or in</span>
<a name="162" /><span class="Maybe">     162:</span> <span class="k"> * a thread that is bound to the current CPU.)</span>
<a name="163" /><span class="Maybe">     163:</span> <span class="k"> *</span>
<a name="164" /><span class="Maybe">     164:</span> <span class="k"> * NOTE: raw_smp_processor_id() is for internal use only</span>
<a name="165" /><span class="Maybe">     165:</span> <span class="k"> * (smp_processor_id() is the preferred variant), but in rare</span>
<a name="166" /><span class="Maybe">     166:</span> <span class="k"> * instances it might also be used to turn off false positives</span>
<a name="167" /><span class="Maybe">     167:</span> <span class="k"> * (i.e. smp_processor_id() use that the debugging code reports but</span>
<a name="168" /><span class="Maybe">     168:</span> <span class="k"> * which use for some reason is legal). Don&apos;t use this to hack around</span>
<a name="169" /><span class="Maybe">     169:</span> <span class="k"> * the warning message, as your code might not work under PREEMPT.</span>
<a name="170" /><span class="Maybe">     170:</span> <span class="k"> */</span>
<a name="171" /><span class="False">     171:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_DEBUG_PREEMPT</span>
<a name="172" /><span class="False">     172:</span>   <span class="m">extern</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">debug_smp_processor_id</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="173" /><span class="False">     173:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_c21wX3Byb2Nlc3Nvcl9pZF8w"><span class="b">smp_processor_id</span></a><span class="f">(</span><span class="f">)</span> <span class="b">debug_smp_processor_id</span><span class="f">(</span><span class="f">)</span>
<a name="174" /><span class="Maybe">     174:</span> <span class="f">#</span><span class="n">else</span>
<a name="175" /><span class="Maybe">     175:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_c21wX3Byb2Nlc3Nvcl9pZF8w"><span class="b">smp_processor_id</span></a><span class="f">(</span><span class="f">)</span> <a href="cpu.c_macros_noref.html#_cmF3X3NtcF9wcm9jZXNzb3JfaWRfMA__"><span class="b">raw_smp_processor_id</span></a><span class="f">(</span><span class="f">)</span>
<a name="176" /><span class="Maybe">     176:</span> <span class="f">#</span><span class="n">endif</span>
<a name="177" /><span class="Maybe">     177:</span> 
<a name="178" /><span class="Maybe">     178:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Z2V0X2NwdV8w"><span class="b">get_cpu</span></a><span class="f">(</span><span class="f">)</span>        <span class="f">(</span><span class="f">{</span> <a href="cpu.c_macros_ref.html#_cHJlZW1wdF9kaXNhYmxlXzA_"><span class="b">preempt_disable</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span> <a href="cpu.c_macros_noref.html#_c21wX3Byb2Nlc3Nvcl9pZF8w"><span class="b">smp_processor_id</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span> <span class="f">}</span><span class="f">)</span>
<a name="179" /><span class="Maybe">     179:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cHV0X2NwdV8w"><span class="b">put_cpu</span></a><span class="f">(</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_cHJlZW1wdF9lbmFibGVfMA__"><span class="b">preempt_enable</span></a><span class="f">(</span><span class="f">)</span>
<a name="180" /><span class="Maybe">     180:</span> 
<a name="181" /><span class="Maybe">     181:</span> <span class="k">/*</span>
<a name="182" /><span class="Maybe">     182:</span> <span class="k"> * Callback to arch code if there&apos;s nosmp or maxcpus=0 on the</span>
<a name="183" /><span class="Maybe">     183:</span> <span class="k"> * boot command line:</span>
<a name="184" /><span class="Maybe">     184:</span> <span class="k"> */</span>
<a name="185" /><span class="Maybe">     185:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">arch_disable_smp_support</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="186" /><span class="Maybe">     186:</span> 
<a name="187" /><span class="Maybe">     187:</span> <span class="m">void</span> <span class="b">smp_setup_processor_id</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="188" /><span class="Maybe">     188:</span> 
<a name="189" /><span class="True">     189:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* __LINUX_SMP_H */</span>
<a name="190" /><span class="True">     190:</span> </pre>
  </body>
</html>
